package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import modelo.Categoria;
import modelo.Produto;

public class ProdutosDAO {

	private final Connection con;
	
	private int id;

	public ProdutosDAO(Connection con) {
		this.con = con;
	}

	public void Salva(Produto produto) throws SQLException {
		 String sql = "INSERT INTO A_PRODUTOS$ (NOME, DESCRICAO) VALUES(?, ?)";

		try( PreparedStatement stmt = con.prepareStatement( sql, new String[] {"PRODUTOSID"})  ){            
			
			stmt.setString(1, produto.getNome() );
			stmt.setString(2, produto.getDescricao() );
			stmt.execute();
			 			
			try(ResultSet  rs  = stmt.getGeneratedKeys() ){
				if (rs.next()){
					id = rs.getInt(1);
					produto.setId(id);	
					System.out.println("INCLUIDO: " +  produto );  
				}
			}
		}
	}

	public List<Produto> lista() throws SQLException {

		List<Produto> listaProdutos = new ArrayList<>();
		
		String sql = "SELECT * FROM A_PRODUTOS$ ORDER BY PRODUTOSID";
        try(PreparedStatement stmt = con.prepareStatement(sql)){
        	stmt.execute();
        	
			transformaResultadoEmProdutos(stmt, listaProdutos);
			
        }
		return listaProdutos;
	}
	
	public void Atualiza(int atualizarlinha) throws SQLException {
		String sql = "UPDATE A_PRODUTOS$ SET DESCRICAO = ? WHERE PRODUTOSID = ? ";
		if (atualizarlinha == 1) {
	        try(PreparedStatement stmt = con.prepareStatement(sql)){
				stmt.setString(1, "KIT CADEIRA + BALCO + MESA" );
				stmt.setInt(2, id);
				stmt.executeUpdate(); 
	        }
			
		}
		
	}

	public List<Produto> busca(Categoria categoria) throws SQLException {
		System.out.println("executando...");
		List<Produto> listaProdutos = new ArrayList<>();
		
		String sql = "SELECT * FROM A_PRODUTOS$ WHERE CATEGORIAID = ?";
        try(PreparedStatement stmt = con.prepareStatement(sql)){
        	stmt.setInt(1, categoria.getId() );
        	stmt.execute();
        	
			transformaResultadoEmProdutos(stmt, listaProdutos);
			
        }
		return listaProdutos;
	}

	private void transformaResultadoEmProdutos(PreparedStatement stmt, List<Produto> listaProdutos) throws SQLException {
		try(ResultSet  rs  = stmt.getResultSet()){

		    while ( rs.next() ) {
		        //int     id        = rs.getInt   ("PRODUTOSID");  
		        String  nome      = rs.getString("NOME");     
		        String  descricao = rs.getString("DESCRICAO"); 
		        
		        Produto produto = new Produto(nome, descricao); //cria produto...
		        produto.setId(id);
		        
		        listaProdutos.add(produto); //add o produto na lista..
		    } 
		    
		}
	}

}
